package main

import (
	"fmt"
	"github.com/AsynkronIT/goconsole"
	"github.com/AsynkronIT/protoactor-go/actor"
)
/*一个普通pid*/
type Hello struct{ Who string } //发送消息结构
type HelloActor struct{}
//pid绑定一个receive方法处理接收到邮箱的信息
func (state *HelloActor) Receive(context actor.Context) {
	switch msg := context.Message().(type) { //按时间顺序读取邮箱
	case Hello:                               //hello消息
		fmt.Printf("Hello %v\n", msg.Who) //读取消息结构who内容
	}
}

func main() {
	/*EmptyRootContext返回默认的rootContext。请不要在此上下文中设置任何头/中间软件。*/
	context := actor.EmptyRootContext //获得默认上下文
	/*使用指定的演员结构创建演员模板，需实现actor接口对应的receive方法*/
	props := actor.PropsFromProducer(func() actor.Actor { return &HelloActor{} })
	pid := context.Spawn(props) //基于模板创建实例并返回一个pid，该pid与新邮箱关联
	context.Send(pid,Hello{Who: "Roger"}) //发送消息至该pid
	console.ReadLine() //读取缓冲区并打印一行
}